package com.cuz.hot100;

import java.util.ArrayList;

public class Q50XpowN {

    public static void main(String[] args) {

        //
        System.out.println(new ArrayList<int[]>().toArray(new int[0][]));

        //二者的不同点在于“>>”在执行右移操作时，
        // 若参与运算的数字为正数，则在高位补0；若为负数，则在高位补1。
        // 而“>>>”则不同，无论参与运算的数字为正数或为负数，在执运算时，都会在高位补0。

        System.out.println((-3 >> 1));
        System.out.println(Integer.toBinaryString(-3));
        System.out.println(Integer.toBinaryString(-3 >> 1));
        System.out.println(Integer.parseInt("1111100",2));
        System.out.println((-3 / 2) );
        //2.00000
        //-2147483648
        System.out.println(myPow1(34.00515, -3));
        System.out.println(myPow(34.00515, -3));
    }

    public static double myPow1(double x, int n) {
        if (x == 0 || x == 1) {
            return x;
        }
        if (n == -1) {
            return 1 / x;
        }
        if (n == 0) {
            return 1;
        }
        int half = n >> 1;
        double halfPow = myPow1(x, half);
        double res = (n & 1) == 0 ? halfPow * halfPow : halfPow * halfPow * x;
        return res;
    }

    public static double myPow(double x, int n) {

        if (x == 0 || x == 1) {
            return x;
        }

        if (n == 0) {
            return 1;
        }
        if (n == -1) {
            return 1 / x;
        }

        int half = n / 2 ;
        double halfPow = myPow(x, half);
        if ( (n % 2) == 0){
            return  halfPow * halfPow;
        }else {
            if (n>0){
                return halfPow * halfPow * x;
            }else {
                return halfPow * halfPow * 1/x;
            }
        }
    }


}
